<?php
class Prod_motos extends MY_Controller {

	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), 'Prod_moto');

    	$this->title = 'Productos :: Motos';
		$this->CARPETA_VISTAS = 'productos/';
		$this->nombre_entidad = 'Moto';
		$this->nombre_entidad_plural = $this->nombre_entidad . 's';

		$this->pagina_ver = $this->CARPETA_VISTAS . 'moto_ver_todos_view';
		$this->pagina_editar = $this->CARPETA_VISTAS . 'moto_edit_view';
		$this->pagina_filtros_ver = $this->CARPETA_VISTAS . 'moto_filtros_ver_todos_view';

		$this->genero_entidad = 'F';
	}


	/* IMPORTANTE: DEBE existir esta función. 
	 * Crea un objeto de la entidad correspondiente y lo pobla con la información obtenida a 
	 * partir del formulario recibido a través de POST.	*/
	protected function getObjetoDesdeForm()
	{
		$idEntidad = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		
		$objEntidad = $this->getObjeto($idEntidad);
		$objEntidad->numeroSerie = $this->input->post('txt_numeroSerie');
		$objEntidad->anio_modelo = $this->input->post('txt_anioModelo');
		$objEntidad->numero_chasis = $this->input->post('txt_numeroChasis');
		$objEntidad->numero_motor = $this->input->post('txt_numeroMotor');
		$objEntidad->observacion = $this->input->post('txt_observacion');
		$objEntidad->patente = $this->input->post('txt_patente');
		$objEntidad->formulario01 = $this->input->post('txt_formulario01');
		$objEntidad->formulario12 = $this->input->post('txt_formulario12');


		$datos['objEntidad'] = $objEntidad;
		
		// OBJETOS RELACIONADOS
		$id_prod = is_numeric($this->input->post('txt_prod_id')) ? $this->input->post('txt_prod_id') : NULL;
		$objProducto = new Prod_producto($id_prod);

		$id_tipo = is_numeric($this->input->post('sel_tipo')) ? $this->input->post('sel_tipo') : NULL;
		$objTipo = new Prod_tipo($id_tipo);

		$id_color = is_numeric($this->input->post('sel_color')) ? $this->input->post('sel_color') : NULL;
		$objColor = new Prod_color($id_color);

		$datos['objRelacionados'] = array($objProducto, $objTipo, $objColor);

		return $datos;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Carga en el arreglo que luego se pasarán a las vistas, los datos correspondientes a otras entidades que se
	 * necesiten. Por ejemplo, en este método deben cargarse las entidades a las que puede asociarse o relacionarse
	 * la entidad actual. Si no se requiriesen, no se agrega nada. */
	protected function cargarDatosRelacionados($dataView)
	{
		$obj_tipo = new Prod_tipo();
		$dataView['listado_tipos'] = $obj_tipo->get_iterated();

		$obj_color = new Prod_color();
		$obj_color->order_by('nombre', 'asc');
		$dataView['listado_colores'] = $obj_color->get_iterated();

		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Obtiene el listado de elementos de acuerdo a los filtros que se hayan establecido y enviado a través
	 * del método POST. Devuelve un detalle de los filtros aplicados (o vacío si no hubiera filtros)	*/	
	protected function _aplicarFiltros($dataView = array())
	{
		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$objEntidad = $this->getObjeto();
		$detalle_filtros = '';

		$producto = trim($this->input->post('f_txt_producto'));
		if(!empty($producto)) { 
			$objEntidad->like_related_prod_producto('nombre', $producto);
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'Producto => ' . $producto;
		}

		$num_serie = trim($this->input->post('f_txt_numeroserie'));
		if(!empty($num_serie)) { 
			$objEntidad->where('numeroSerie', $num_serie); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'N° Serie => ' . $num_serie;
		}

		$num_chasis = is_numeric($this->input->post('f_txt_numeroChasis')) ? $this->input->post('f_txt_numeroChasis') : 0;
		if($num_chasis != 0) { 
			$objEntidad->where('numero_chasis', $num_chasis); 
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'N° Chasis => ' . $num_chasis;
		}

		$num_motor = is_numeric($this->input->post('f_txt_numeroMotor')) ? $this->input->post('f_txt_numeroMotor') : 0;
		if($num_motor != 0) { 
			$objEntidad->where('numero_motor', $num_motor);
			$detalle_filtros .= (!empty($detalle_filtros) ? ' | ' : '') . 'N° Motor => ' . $num_motor;
		}

		$dataView['objEntidad'] = $objEntidad;
		$dataView['detalle_filtros'] = $detalle_filtros;

		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda ELIMINARSE. */
	protected function validarEliminacion($id_elemento)
	{
		$objEntidad = $this->getObjeto($id_elemento);

		// Valido si tiene elementos asociados.
		$objStock = new Prod_stock();
        $objStock->where('prod_moto_id', $id_elemento);

        $objAdjunto = new Prod_adjuntoMoto();
        $objAdjunto->where('prod_moto_id', $id_elemento);

        if ($objStock->count() == 0 && $objAdjunto->count() == 0) return TRUE;
        else return FALSE;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda EDITARSE. */
	protected function validarEdicion($id_elemento)
	{
		return TRUE;
	}

	/** Llamada desde AJAX para mostrar un resumen de un objeto
	*/
	public function toString($id_elemento, $datos = '', $objEntidad = NULL)
	{
		if($objEntidad == NULL) $objEntidad = $this->getObjeto($id_elemento);
		$id_elemento = $objEntidad->id;

		$datos = '<h4>Detalle de la moto</h4>';
		$datos .= $objEntidad->toString();
		$datos .= "<input type='hidden' id ='txt_moto_id' name ='txt_moto_id' value='$id_elemento'>";

		parent::toString($id_elemento, $datos);
	}

	public function generar_excel()
	{
		$dataView['datos_campos'] = array(array('relation', 'codigo', 'prod_producto'),
											array('relation', 'nombre', 'prod_producto'),
											array('relation', 'descripcion', 'prod_producto'),
											array('relation', 'nombre', 'prod_producto', 'prod_marca'), 
											array('relation', 'nombre', 'prod_producto', 'prod_modelo'),
											array('relation', 'nombre', 'prod_producto', 'prod_subrubro'),
											array('field', 'numeroSerie'),
											array('field', 'anio_modelo'),
											array('field', 'numero_chasis'),
											array('field', 'numero_motor'),
											array('field', 'patente'));
		$dataView['headers_datos'] = array('Código (Producto)', 'Nombre', 'Descripción', 'Marca', 'Modelo', 'Sub-rubro', 'N° Serie', 'Año del Modelo', 'N° Chasis', 'N° Motor', 'Patente');

		parent::generar_excel($dataView);
	}

	protected function setAyuda($dataView) {
		$dataView['descripcion_breve'] = 'Todas las motos deben cargarse a partir de un producto previamente creado.';
		$dataView['ayuda_explicación_adicional'] = 'Además de la funcionalidad mencionada arriba, se puede realizar la gestión de adjuntos (documentos, imágenes, archivos en general) relacionados con cada 
													elemento cargado, a través del botón ' . $this->extras_form->adjuntoButton('', 0, TRUE);
		$dataView['ayuda_adicional'] = '';
		$dataView['ayuda_borradoPosible'] = 'Sólo pueden borrarse motos que no estén siendo utilizadas o referenciadas en otras áreas del sistema.';
		$dataView['boton_visualizar'] = TRUE;

		return $dataView;
	}
}